# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter


class Scrapy04DangdangPipeline:

    def open_spider(self,spider):
        print('++++++++++++++++++++')
        #这里不能写a而是w，因为文件不存在时a会报错
        #而且因为文件一直开着不再是以前在with的包括下，出with就结束，所以可以使用w
        #一直保持写的状态
        self.fp=open('book.json','w',encoding='utf-8')

    def process_item(self, item, spider):
        #其实item就是book

        # 以下这种模式不推荐  因为每传递过来一个对象 那么就打开一次文件  对文件的操作过于频繁

        # # (1) write方法必须要写一个字符串 而不能是其他的对象
        # # (2) w模式 会每一个对象都打开一次文件 覆盖之前的内容
        # with open('当当书城纪录下载.json','a',encoding='utf-8') as fj:
        #     #注意不能直接write(item),因为item是实例化的对象，write只能写字符串
        #     #要强制类型转换
        #     fj.write(str(item))
        self.fp.write(str(item))
        return item

    def close_spider(self,spider):
        print('__________________________________')
        self.fp.close()

# 多条管道开启
#    (1) 定义管道类
#   （2） 在settings中开启管道

import urllib.request
class DangdangDownloadPipeline:
    def process_item(self, item, spider):
        #我们主要是下载书的图片(用的是urllib.request.urlretrieve)
        #src要加引号
        url='http:'+item.get('src')

        #这样写的话下载的图片就是和pipelines在同一目录里
        # filename=item.get('alt')+'.jpg'
        #注意要存在books中需要提前新建一个books文件夹（directory）
        # FileNotFoundError: [Errno 2] No such file or directory: './books/
        filename='./books/'+item.get('alt')+'.jpg'
        urllib.request.urlretrieve(url=url,filename=filename)

        return item
